package main

import (
	"bufio"
	"flag"
	"fmt"
	"io"
	"os"
)

//获取用户输入内容
func userScan() {
	var a string
	fmt.Println("请输入内容")
	fmt.Scanln(&a)
	fmt.Printf("你输入的内容是：%s\n", a)

}

//获取用户输入内容
func userBufio() {
	var a string
	reader := bufio.NewReader(os.Stdin)
	fmt.Println("请输入内容")
	a, _ = reader.ReadString('\n')
	fmt.Printf("你输入的内容是：%s\n", a)

}

// CopyFile 拷贝文件函数
func CopyFile(dstName, srcName string) (written int64, err error) {
	// 以读方式打开源文件
	src, err := os.Open(srcName)
	if err != nil {
		fmt.Printf("open %s failed, err:%v.\n", srcName, err)
		return
	}
	defer src.Close()
	// 以写|创建的方式打开目标文件
	dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
	if err != nil {
		fmt.Printf("open %s failed, err:%v.\n", dstName, err)
		return
	}
	defer dst.Close()
	return io.Copy(dst, src) //调用io.Copy()拷贝内容
}

// cat 命令实现
func cat(r *bufio.Reader) {
	for {
		buf, err := r.ReadBytes('\n') //注意是字符
		if err == io.EOF {
			break
		}
		fmt.Fprintf(os.Stdout, "%s", buf)
	}
}

func main() {
	fmt.Println("输入空格只能接受一个")
	// userScan()
	//userBufio()
	//copy开始
	// _, err := CopyFile("dst.txt", "src.txt")
	// if err != nil {
	// 	fmt.Println("copy file failed, err:", err)
	// 	return
	// }
	// fmt.Println("copy done!")
	//copy结束
	//cat开始
	flag.Parse() // 解析命令行参数
	if flag.NArg() == 0 {
		// 如果没有参数默认从标准输入读取内容
		cat(bufio.NewReader(os.Stdin))
	}
	// 依次读取每个指定文件的内容并打印到终端
	for i := 0; i < flag.NArg(); i++ {
		f, err := os.Open(flag.Arg(i))
		if err != nil {
			fmt.Fprintf(os.Stdout, "reading from %s failed, err:%v\n", flag.Arg(i), err)
			continue
		}
		cat(bufio.NewReader(f))
	}
	//cat结束
}
